home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1993 David I. Bell
- * Permission is granted to use, distribute, or modify this source,
- * provided that this copyright notice remains intact.
- *
- * Allocator definitions (fast malloc and free)
- */
-
- #if !defined(CALC_MALLOC)
-
- #include "have_malloc.h"
- #ifdef HAVE_MALLOC_H
- # include <malloc.h>
- #else
- # if defined(__STDC__)
- extern void *malloc();
- extern void *realloc();
- extern void free();
- # else
- extern char *malloc();
- extern char *realloc();
- extern void free();
- # endif
- #endif
-
- #include "have_string.h"
-
- #ifdef HAVE_STRING_H
- # include <string.h>
-
- #else
-
- # ifdef OLD_BSD
- extern void bcopy();
- extern void bfill();
- extern char *index();
- # else /* OLD_BSD */
- extern void memcpy();
- extern void memset();
- # if defined(__STDC__)
- extern void *strchr();
- # else
- extern char *strchr();
- # endif
- # endif /* OLD_BSD */
- extern void strcpy();
- extern void strncpy();
- extern void strcat();
- extern int strcmp();
- extern long strlen(); /* should be size_t, but old systems don't have it */
-
- #endif
-
- #ifdef OLD_BSD
- #undef memcpy
- #define memcpy(s1, s2, n) bcopy(s2, s1, n)
- #undef memset
- #define memset(s, c, n) bfill(s, n, c)
- #undef strchr
- #define strchr(s, c) index(s, c)
- #endif
-
- #ifdef DONT_HAVE_VSPRINTF
- /*
- * XXX - hack aleart
- *
- * Systems that do not have vsprintf() need something. In some cases
- * the sprintf function will deal correctly with the va_alist 3rd arg.
- * Hope for the best!
- */
- #define vsprintf sprintf
- #endif
-
- #define mem_alloc malloc
- #define mem_realloc realloc
- #define mem_free free
-
- #else /*!CALC_MALLOC*/
-
- #define malloc(a) mem_alloc((long) a)
- #define realloc(a,b) mem_realloc((char *) a, (long) b)
- #define free(a) mem_free((char *) a)
- extern char *mem_alloc();
- extern char *mem_realloc();
- extern int mem_free(); /* MUST be int even though no return value */
-
- #endif /*!CALC_MALLOC*/
-
-
- /*
- * An item to be placed on a free list.
- * These items are overlayed on top of the actual item being managed.
- * Therefore, the managed items must be at least this size!
- * Also, all items on a single free list must be the same size.
- */
- struct free_item {
- struct free_item *next; /* next item on free list */
- };
- typedef struct free_item FREEITEM;
-
-
- /*
- * The actual free list header.
- */
- typedef struct {
- long itemsize; /* size of an item being managed */
- long maxfree; /* maximum number of free items */
- long curfree; /* current number of free items */
- FREEITEM *freelist; /* the free list */
- } FREELIST;
-
- #if defined(__STDC__)
- typedef void ALLOCITEM;
- #else
- typedef char ALLOCITEM;
- #endif
- extern ALLOCITEM * allocitem( /* FREELIST * */ );
- extern void freeitem( /* FREELIST *, char * */ );
- extern void mem_stats();
-
- /* END CODE */
-